home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 24 / AACD 24.iso / AACD / Online / netspeechd / speechd.s < prev   
Text File  |  2001-07-31  |  12KB  |  651 lines

  1. ; netSpeechD by (c) Cyborg 2001
  2. ; (c) 1999 Cyborg 
  3.  
  4.  
  5.  
  6. IFND Konstanten_Flag
  7. Konstanten_Flag=1
  8. Endif
  9.  
  10. Mode_New=1006
  11. Mode_Old=1005
  12. Offset_Begin=-1
  13. Offset_End=1
  14. Offset_Current=0
  15. Access_Read=-2
  16. Access_Write=-1
  17. DosTrue=-1
  18. DosFalse=0
  19. True=Dostrue
  20. False=DosFalse
  21. NM_Title=1
  22. NM_Item=2
  23. NM_SUB=3
  24. NM_barlabel=-1
  25. MENU_IMAGE=128
  26. IM_ITEM=NM_ITEM!MENU_IMAGE
  27. IM_SUB=NM_SUB!MENU_IMAGE
  28. NM_END=0
  29. NM_IGNORE=64
  30. MENUENABLED=1
  31. NM_MENUDISABLED=MENUENABLED
  32. Itemenabled=$10
  33. NM_ITEMDISABLED=ITEMENABLED
  34. Commseq=$4
  35. NM_COMMANDSTRING=COMMSEQ
  36. Itemtext=$2
  37. HighFlags=$c0
  38. NM_FLAGMASK=~(COMMSEQ!ITEMTEXT!HIGHFLAGS)
  39. NM_FLAGMASK_V39=~(ITEMTEXT!HIGHFLAGS)
  40. Null=0
  41.     IncDir     "Sys:Coder/"
  42.     Include     "Preass/Konstanten.inc"
  43.     Include     "Preass/ASL_lib.inc"
  44.     Include     "Preass/intuition.inc"
  45.     Include     "Include/Guienv.i"
  46.     Include     "Include/Libraries/gadtools.i"
  47.  
  48. Main:
  49.     Include "preass/Startup.i"
  50.     Jsr Openlibs
  51.     Tst.l D0
  52.     Beq Mainende
  53.     Jsr START
  54.     jsr freeremmalloc
  55. Mainende:
  56.     jsr Closelibs
  57.     Move.l Error,d0
  58.     tst.l d0
  59.     beq .l1
  60.     jmp ErrorHandling
  61. .l1:    Rts
  62.  
  63.  
  64. sockaddr_in.sin_len=0
  65. sockaddr_in.sin_family=1
  66. sockaddr_in.sin_port=2
  67. sockaddr_in.sin_addr=4
  68. sockaddr_in.sin_zero=8
  69. Sockaddr.SA_Len=0
  70. Sockaddr.SA_Family=1
  71. Sockaddr.SA_Data=2
  72.  
  73. Hostent.H_name=0
  74. Hostent.h_aliases=4
  75. Hostent.h_addrtype=8
  76. Hostent.h_length=12
  77. Hostent.H_addr_list=16
  78.  
  79. servent.s_name=0
  80. servent.s_aliases=4
  81. servent.s_port=8
  82. servent.s_proto=10
  83.  
  84. AF_INET=2
  85. INADDR_ANY=0
  86. Sock_STREAM=1
  87. SOCK_DGRAM=2
  88. FIONBIO=$8004667e
  89.  
  90.  
  91. GetSigs:  
  92.     Move.l ExecBase,a6
  93.     Move.l #0,d0
  94.     Move.l #0,d1
  95.     Jsr SetSignal(a6)
  96.     Move.l D0,Signals
  97.     Move.l Signals,d0
  98.     And.l #$F000,d0
  99.     Move.l D0,Signals
  100.     Move.l Signals,d0
  101.     RTS
  102.  
  103. FillBuffer:          
  104.     subq.l #1,d1
  105. .l1:move.b d0,(a0)+
  106.     dbra d1,.l1
  107.     rts    
  108.  
  109.  
  110. Start:
  111.     Move.l #21846,d0
  112.     Move.l D0,UsePort
  113.     lea Filename,a1
  114.     Lea _____name000,a0
  115. .Name001:Move.b (a0)+,d0
  116.     Move.b D0,(a1)+
  117.     Cmpi.b #0,d0
  118.     Bne .Name001
  119. Jsr GetFilename
  120.     Cmp.l #0,d0
  121.     Bne .pre0000
  122.     Bra .pre0001
  123. .pre0000:
  124.  
  125.        lea Filename,a5
  126.        Jsr asc2zahl
  127.        Move.l D0,UsePort
  128. .Pre0001:
  129.     lea Portname,a1
  130.     Lea speechdname001,A0
  131. .Name002:Move.b (a0)+,d0
  132.     Move.b D0,(a1)+
  133.     Cmpi.b #0,d0
  134.     Bne .Name002
  135.     lea -1(a1),A1
  136.     Lea Filename,a0
  137. .Name003:Move.b (a0)+,d0
  138.     Move.b D0,(a1)+
  139.     Cmpi.b #0,d0
  140.     Bne .Name003
  141. Move.l ExecBase,a6
  142. Move.l Portname,a1
  143. Jsr FindPort(a6)
  144.     Cmp.l #0,d0
  145.     Bne .pre0002
  146.     Bra .pre0003
  147. .pre0002:
  148.  
  149. Move.l DOSBase,a6
  150. Move.l #Dname003,d1
  151. Move.l #nullt,d2
  152. Jsr vpf(a6)
  153.      RTS
  154. .Pre0003:
  155. Move.l rot3dbase,a6
  156. Move.l Portname,a0
  157. Jsr PortUp(a6)
  158. Move.l D0,MPort
  159.     Cmp.l #0,d0
  160.     Beq .pre0004
  161.     Bra .pre0005
  162. .pre0004:
  163.  
  164. Move.l DOSBase,a6
  165. Move.l #speechd_Port_NICHT_VERFname004,d1
  166. Move.l #nullt,d2
  167. Jsr vpf(a6)
  168.     Move.l #0,d0
  169.     RTS
  170. .Pre0005:
  171.     Moveq.l #$0,d0
  172.     Move.l D0,DeineNummer
  173. Move.l DOSBase,a6
  174. Move.l #speechd_gestartetxnname005,d1
  175. Move.l #nullt,d2
  176. Jsr vpf(a6)
  177. Move.l BSDSocketBase,a6
  178. Move.l #AF_INET,d0
  179. Move.l #SOCK_DGRAM,d1
  180. Move.l #0,d2
  181. Jsr TCP_Socket(a6)
  182. Move.l D0,socket
  183.    Cmp.l #-1,d0
  184.    Bne .pre0006
  185.    Bra .pre0007
  186. .pre0006:
  187.  
  188.         lea sockaddr_in,A0
  189.         Lea sockaddr_in.sin_family(a0),a0
  190.         Move.l #AF_Inet,d0
  191.         Move.b d0,(A0)
  192.          lea sockaddr_in,A0
  193.          Lea sockaddr_in.sin_port(a0),a0
  194.          Move.l UsePort,d0
  195.          Move.w d0,(A0)
  196.      lea sockaddr_in,A0
  197.      Lea sockaddr_in.sin_addr(a0),a0
  198.      Move.l #INADDR_ANY,(a0)
  199.              lea sockaddr_in,A0
  200.              Lea sockaddr_in.sin_len(a0),a0
  201.              Move.l #16,d0
  202.              Move.b d0,(A0)
  203.         Move.l BSDSocketBase,a6
  204.         Move.l Socket,d0
  205.         lea Sockaddr_in,a0
  206.         Move.l #16,d1
  207.         Jsr TCP_Bind(a6)
  208.         Move.l D0,ret
  209.         Move.l Ret,d0
  210.         Cmp.l #-1,d0
  211.         Beq .pre0008
  212.         Bra .pre0009
  213. .pre0008:
  214.  
  215. Move.l DOSBase,a6
  216. Move.l #speechd___Bind_Error_xnname006,d1
  217. Move.l #nullt,d2
  218. Jsr vpf(a6)
  219.          Move.l BSDSocketBase,a6
  220.          Move.l Socket,d0
  221.          Jsr TCP_CloseSocket(a6)
  222.            Move.l rot3dbase,a6
  223.            Move.l mPort,a0
  224.            Jsr PortDown(a6)
  225.            Move.l #0,d0
  226.     RTS
  227. .Pre0009:
  228. .While0000:
  229. Jsr GetSigs
  230.          Cmp.l #0,d0
  231.          Beq .pre0010
  232.          Bra .pre0011
  233. .pre0010:
  234.  
  235.            Move.l #16,d0
  236.            Move.l D0,Sockaddrlen
  237.            lea Zwischenpuffer,A0
  238.            Move.l #0,d0
  239.            Move.l #5000,d1
  240.            Jsr Fillbuffer
  241.            Move.l BSDSocketBase,a6
  242.            Move.l Socket,d0
  243.            lea ZwischenPuffer,a0
  244.            Move.l #3000,d1
  245.            Move.l #0,d2
  246.            lea Sockaddr_in,a1
  247.            lea sockaddrlen,a2
  248.            Jsr TCP_RecvFrom(a6)
  249.            Move.l D0,res1
  250.            Jsr TCP_Errno(a6)
  251.            Move.l D0,res2
  252.            Move.l res2,d0
  253.            Cmp.l #0,d0
  254.            Beq .pre0012
  255.            Move.l res1,d0
  256.            Cmp.l #-1,d0
  257.            Bgt .pre0012
  258.            Bra .pre0013
  259. .pre0012:
  260.  
  261. Move.l DOSBase,a6
  262. Move.l #speak_name007,d1
  263. Move.l #MODE_OLD,d2
  264. Jsr open(a6)
  265. Move.l D0,sh
  266.               Cmp.l #0,d0
  267.               Bne .pre0014
  268.               Bra .pre0015
  269. .pre0014:
  270.  
  271.                  Move.l DOSBase,a6
  272.                  Move.l SH,d1
  273.                  Move.l #Zwischenpuffer,d2
  274.                  Move.l res1,d3
  275.                  Jsr Write(a6)
  276.                  Move.l SH,d1
  277.                  Jsr close(a6)
  278. .Pre0015:
  279. .Pre0013:
  280.            Move.l ret,d0
  281.            Cmp.l #-1,d0
  282.            Beq .pre0016
  283.            Bra .pre0017
  284. .pre0016:
  285.  
  286.               Move.l DOSBase,a6
  287.               Move.l #25,d1
  288.               Jsr Delay(a6)
  289.               Move.l BSDSocketBase,a6
  290.               Jsr TCP_Errno(a6)
  291.               Move.l D0,RES
  292. lea pf008,a0
  293. move.l  res,0000(a0)
  294. Move.l DOSBase,a6
  295. Move.l #speechd___Accept_Error_name008,d1
  296. Move.l #pf008,d2
  297. Jsr vpf(a6)
  298. .Pre0017:
  299. Bra .While0000
  300. .Pre0011:
  301. .While0001:
  302. Move.l DOSBase,a6
  303. Move.l #speechd___Dname009,d1
  304. Move.l #nullt,d2
  305. Jsr vpf(a6)
  306.     Move.l BSDSocketBase,a6
  307.     Move.l Socket,d0
  308.     Jsr TCP_CloseSocket(a6)
  309. .Pre0007:
  310.     Move.l rot3dbase,a6
  311.     Move.l mPort,a0
  312.     Jsr PortDown(a6)
  313.     RTS
  314.  
  315.  
  316. GetFilename:
  317.         cmpi.l #0,laenge
  318.         beq .l13
  319.         cmpi.l #1,laenge
  320.         beq .l13
  321.         suba.l a2,a2
  322.         suba.l a1,a1
  323.         Move.l Adresse,a0
  324. .l1:    cmpi.b #`"`,(a0)
  325.         beq .l10
  326.         cmpi.b #` `,(a0)+
  327.         beq .l1
  328.         lea -1(a0),a1
  329. .l2:    cmpi.b #`"`,(a0)
  330.         beq .l11
  331.         cmpi.b #$0a,(a0)
  332.         beq .l12
  333.         cmpi.b #$00,(a0)
  334.         beq .l12
  335.         cmpi.b #` `,(a0)+
  336.         bne .l2
  337.         Lea -1(a0),a2
  338. .l3:    suba.l a1,a2
  339.         move.l A0,NextArg
  340.         Move.l ExecBase,a6
  341.         Move.l a1,a0
  342.         Move.l #Filename,a1
  343.         Move.l a2,d0
  344.         Jsr Copymem(a6)
  345.         Move.l a2,d0
  346.         rts
  347. .l10:   lea 1(a0),a1
  348.         movea.l a1,a0
  349.         bra .l22
  350. .l11:   move.l a0,a2
  351.         bra .l3
  352. .l12:   move.l a0,a2
  353.         bra .l3
  354. .l13:   moveq.l #0,d0
  355.         RTS
  356. .l22:   cmpi.b #`"`,(a0)
  357.         beq .l11
  358.         cmpi.b #$0a,(a0)
  359.         beq .l12
  360.         cmpi.b #$00,(a0)
  361.         beq .l12
  362.         lea 1(a0),a0
  363.         bne .l22
  364.  
  365. CountString2:    
  366.         move.l a1,-(Sp)
  367.         move.l a0,a1
  368. .l1:    cmpi.b #$0a,(a1)
  369.         beq .l2
  370.         cmpi.b #",",(a1)
  371.         beq .l2
  372.         cmpi.b #" ",(a1)
  373.         beq .l2
  374.         cmpi.b #$00,(a1)+
  375.         bne .l1
  376.         lea -1(a1),a1
  377. .l2:    sub.l a0,a1
  378.         move.l a1,d0
  379.         move.l (sp)+,a1
  380.         RTS
  381.  
  382. ASC2Zahl:    
  383.     Move.l a5,a0
  384.     Jsr Countstring2
  385.     move.l d0,d7
  386.     subq.l #2,d7
  387.     move.l #1,d0
  388.     cmpi.w #$FFFF,d7
  389.     beq .la
  390. .l0:mulu.l #10,d0
  391.     dbra d7,.l0
  392. .la:move.l d0,d6
  393.     moveq.l #0,d1
  394.     move.l a5,a0
  395.     move.b #"+",d5
  396. .l1:moveq.l #0,d0
  397.     move.b (A0)+,d0
  398.     cmpi.b #"-",d0
  399.     bne .l2
  400.     move.b d0,d5
  401.     Divs.l #10,d6
  402.     bra .l1
  403. .l2:subi.b #$30,d0
  404.     andi.l #$FF,d0
  405.     Muls.l d6,d0
  406.     divs.l #10,d6
  407.     add.l d0,d1
  408.     cmpi.l #0,d6
  409.     bne .l1
  410.     lea 1(a0),a0
  411. ;    move.l a0,NextArg
  412.     move.l d1,d0
  413.     cmpi.b #"+",d5
  414.     beq .l3
  415.     neg.l d0
  416. .l3:RTS
  417.  
  418. Errorhandling:
  419.     Move.l Dosbase,d0
  420.     Cmp.l #0,d0
  421.     Beq .pre0000
  422.     Bra .pre0001
  423. .pre0000:
  424.  
  425.        Move.l ExecBase,a6
  426.        Move.l #dosname000,a1
  427.        Move.l #0,d0
  428.        Jsr Openlibrary(a6)
  429.        Move.l D0,Dosbase
  430.        Move.l DosBase,a1
  431.        Jsr CloseLibrary(a6)
  432. .Pre0001:
  433.     Move.l DOSBase,a6
  434.     Jsr output(a6)
  435.     Move.l D0,Ausgabe
  436.     Move.l Error,d0
  437.     Cmp.l #1,d0
  438.     Beq .Pre0002
  439.     Bra .pre0003
  440. .pre0002:
  441. Move.l DOSBase,a6
  442. Move.l Ausgabe,d1
  443. Move.l #Allgemeiner_Fehlerxnname001,d2
  444. Moveq.l #$13,d3
  445. Jsr Write(a6)
  446. .pre0003:
  447.     Move.l Error,d0
  448.     Cmp.l #2,d0
  449.     Beq .Pre0004
  450.     Bra .pre0005
  451. .pre0004:
  452. Move.l DOSBase,a6
  453. Move.l Ausgabe,d1
  454. Move.l #Konnte_File_nicht_findenxnname002,d2
  455. Moveq.l #$19,d3
  456. Jsr Write(a6)
  457. .pre0005:
  458.     Move.l Error,d0
  459.     Cmp.l #3,d0
  460.     Beq .Pre0006
  461.     Bra .pre0007
  462. .pre0006:
  463. Move.l DOSBase,a6
  464. Move.l Ausgabe,d1
  465. Move.l #Window_Screen_Fehlerxnname003,d2
  466. Moveq.l #$15,d3
  467. Jsr Write(a6)
  468. .pre0007:
  469.     Move.l Error,d0
  470.     Cmp.l #4,d0
  471.     Beq .Pre0008
  472.     Bra .pre0009
  473. .pre0008:
  474. lea PreassErrorTags,a0
  475. move.l  d7,0000(a0)
  476. Move.l DOSBase,a6
  477. Move.l Ausgabe,d1
  478. Move.l #Library_nicht_gefunden__name004,d2
  479. Move.l #PreassErrorTags,d3
  480. Jsr VFWriteF(a6)
  481. .pre0009:
  482.     Move.l Error,d0
  483.     Cmp.l #5,d0
  484.     Beq .Pre0010
  485.     Bra .pre0011
  486. .pre0010:
  487. Move.l DOSBase,a6
  488. Move.l Ausgabe,d1
  489. Move.l #Fehlerhafte_Eingabexnname005,d2
  490. Moveq.l #$14,d3
  491. Jsr Write(a6)
  492. .pre0011:
  493.     Move.l Error,d0
  494.     Cmp.l #6,d0
  495.     Beq .Pre0012
  496.     Bra .pre0013
  497. .pre0012:
  498. Move.l DOSBase,a6
  499. Move.l Ausgabe,d1
  500. Move.l #Speicherfehlerxnname006,d2
  501. Moveq.l #$0F,d3
  502. Jsr Write(a6)
  503. .pre0013:
  504.     RTS
  505.  
  506. Ausgabe:        dc.l 0
  507. even
  508. dosname000:    dc.b `dos.library`,0
  509. even
  510. Allgemeiner_Fehlerxnname001:
  511.     dc.b `Allgemeiner Fehler`,$a,``,0
  512. even
  513. Konnte_File_nicht_findenxnname002:
  514.     dc.b `Konnte File nicht finden`,$a,``,0
  515. even
  516. Window_Screen_Fehlerxnname003:
  517.     dc.b `Window|Screen Fehler`,$a,``,0
  518. even
  519. Fehlerhafte_Eingabexnname005:
  520.     dc.b `Fehlerhafte Eingabe`,$a,``,0
  521. even
  522. Speicherfehlerxnname006:    dc.b `Speicherfehler`,$a,``,0
  523. even
  524.  
  525. even
  526. Library_nicht_gefunden__name004:
  527.     dc.b `Library nicht gefunden: %S`,$a,``,0
  528. even
  529. PreassErrorTags:
  530.     dc.l 0,0
  531. even
  532.  
  533. Even
  534. Freeremmalloc:
  535. rts 
  536. Even
  537. Openlibs:
  538.     Move.l $4.w,a6
  539.     Move.l #DOSname,a1
  540.     Moveq.l #0,d0
  541.     Jsr Openlibrary(a6) 
  542.     Move.l d0,DOSbase
  543.     Tst.l D0
  544.     Beq.w .ende
  545.     Move.l #rot3dname,a1
  546.     Moveq.l #0,d0
  547.     Jsr Openlibrary(a6) 
  548.     Move.l d0,rot3dbase
  549.     Tst.l D0
  550.     Beq.w .ende
  551.     Move.l #BSDSocketname,a1
  552.     Moveq.l #0,d0
  553.     Jsr Openlibrary(a6) 
  554.     Move.l d0,BSDSocketbase
  555.     Tst.l D0
  556.     Beq.w .ende
  557.     rts
  558. .ende:    Move.l #4,error
  559.     Move.l a1,d7
  560.     rts
  561. Closelibs:
  562.     Move.l $4.w,a6
  563.     Tst.l DOSbase
  564.     Beq.w .ende00
  565.     Move.l DOSbase,a1
  566.     Jsr Closelibrary(a6)
  567. .ende00:Tst.l rot3dbase
  568.     Beq.w .ende01
  569.     Move.l rot3dbase,a1
  570.     Jsr Closelibrary(a6)
  571. .ende01:Tst.l BSDSocketbase
  572.     Beq.w .ende02
  573.     Move.l BSDSocketbase,a1
  574.     Jsr Closelibrary(a6)
  575. .ende02:Rts
  576. even
  577. WBmessage:        dc.l 0
  578. Laenge:        dc.l 0
  579. Adresse:        dc.l 0
  580. Error:        dc.l 0
  581. Addr:        dc.l 0
  582. Zeiger:        dc.l 0
  583. Signals:        dc.l 0
  584. UsePort:        dc.l 0
  585. MPort:        dc.l 0
  586. DeineNummer:        dc.l 0
  587. socket:        dc.l 0
  588. ret:        dc.l 0
  589. Sockaddrlen:        dc.l 0
  590. res1:        dc.l 0
  591. res2:        dc.l 0
  592. sh:        dc.l 0
  593. RES:        dc.l 0
  594. NextArg:        dc.l 0
  595. Potenz:        dc.l 0
  596. NONE:        dc.l 0
  597. DOSBase:        dc.l 0
  598. rot3dbase:        dc.l 0
  599. BSDSocketBase:        dc.l 0
  600. even
  601. Version:    dc.b "$VER: speechd 1.0 Cyborg 2001",0
  602. even
  603. sockaddr_in:    blk.b 16,0
  604. even
  605. Sockaddr:    blk.b 16,0
  606. even
  607. Portname:    blk.b 20,0
  608. even
  609. _____name000:
  610.     dc.b `21846`,0
  611. even
  612. speechdname001:    dc.b `speechd.`,0
  613. even
  614. Dname003:    dc.b `Dämon läuft schon.`,$a,``,0
  615. even
  616. speechd_Port_NICHT_VERFname004:
  617.     dc.b `speechd Port NICHT VERFÜGBAR!`,$a,``,0
  618. even
  619. speechd_gestartetxnname005:
  620.     dc.b `speechd gestartet`,$a,``,0
  621. even
  622. speechd___Bind_Error_xnname006:
  623.     dc.b `speechd - Bind-Error `,$a,``,0
  624. even
  625. zwischenpuffer:    blk.b 5000,0
  626. even
  627. speak_name007:
  628.     dc.b `speak:`,0
  629. even
  630. speechd___Accept_Error_name008:
  631.     dc.b `speechd - Accept-Error %ld`,$a,``,0
  632. even
  633. pf008:
  634.     dc.l res,0
  635. speechd___Dname009:
  636.     dc.b `speechd - Dämon beendet sich jetzt`,$a,``,0
  637. even
  638. Filename:    blk.b 256,0
  639. even
  640. Nullt: dc.b 0
  641. DOSname: dc.b "dos.library",0
  642. rot3dname: dc.b "rot3d.library",0
  643. BSDSocketname: dc.b "bsdsocket.library",0
  644. even
  645.     Include "Preass:LVO3.0/Exec_lib.i"
  646.     Include "Preass:LVO3.0/DOS_lib.i"
  647.     Include "Preass:LVO3.0/rot3d_lib.i"
  648.     Include "Preass:LVO3.0/BSDSocket_lib.i"
  649.  
  650.